/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package example04;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.SQLNonTransientConnectionException;
import java.sql.Statement;
import java.util.HashMap;
import java.util.Map;

/**
 *
 * @author Admin
 */
public class DBVocabulary implements Vocabulary {
    
    static final String CONNECTION_ERROR = "Ошибка соединения с сервером localhost на порту 1527.";
    static final String INITIALIZATION_ERROR = "Переменная 'datababe' не инициализирована.";
    static final String CLOSE_ERROR = "Ошибка закрытия соединения.";
    static final String SQL_QUERY = "SELECT * FROM TEST.COLOR WHERE COLOR.ENGLISH = ?";
    static final String COLUMN_ENG = "English";
    static final String COLUMN_RUS = "Russian";
    static final String SERVER_DIRECTION = "jdbc:derby://localhost:1527/";
    static final String USER_NAME = "test";
    static final String USER_PASSWORD = "12345";
    static final String WORD_NOT_FOUND = "Слово в словаре не найдено. ";
    static final String CLOSE_WORD = "close";
    private Map<String, String> map = new HashMap<>();
    private Connection database;
    private PreparedStatement psql;
    private ResultSet result;
    String str;
    
    
    /**
     * коннектится к базе данных и записывает её содержимое в HashMap
     * @param db_name
     * @return
     * @throws SQLException
     */
    @Override
    public void open(String db_name) throws SQLException {
        try {
            database = DriverManager.getConnection(SERVER_DIRECTION + db_name, USER_NAME, USER_PASSWORD);
        } catch(SQLNonTransientConnectionException e){
            System.out.println(CONNECTION_ERROR);
        }
    }
    
    
    /**
     * переводит слово, если оно есть в словаре
     * @param word
     */
    @Override
    public String translate(String word) throws SQLException {
                
        psql = database.prepareStatement(SQL_QUERY);
        psql.setString(1, word);
        result = psql.executeQuery();
        str = "close";      
        if (result.next()) {
            if(word.equals(result.getString(COLUMN_ENG))){
                str = result.getString(COLUMN_RUS);
            }
        }
        else{
            if(word.equals(CLOSE_WORD) != true){
                str = WORD_NOT_FOUND;
            }
        }   
        return str;
    }
}
